Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: jlflyfox   发起时间: 2012-08-03 16:31 下午   回复: 4

Print Search
帖子排序:    
   2012-08-03, 16:31 下午
jlflyfox 离线,最后访问时间: 2009/1/24 22:08:06 jlflyfox

发帖数前25位
注册: 2008-10-28
发 贴: 65
请教下Windows7下的AppInit_DLLs和APIHOOK
Reply Quote

以前从来没有使用过windows7,现在突然发现和xp差别太大了。

我有个应用,需要拦截指定进程某个api调用

我首先在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT \CurrentVersion\Windows

设置AppInit_DLLs为c:\test\Test.dll,并且设置了LoadAppInit_DLLs为1

然后在Test.dll里面首先本进程名字是不是目标进程,如果不是,就返回,如果是,就LoadLibraryA("ApiHook.dll")

ApiHook.dll进行拦截目标函数。

现在的问题是,我发现在windows7下似乎还是不行。

ApiHook已经被DLL_PROCESS_ATTACH了,而且也替换了api,我直接GetProcAddress后拿过来修改的,没有去修改IATEntry。

但后来进程真正调用这个api的时候,发现并没有被hook到,而且我的Test.dll和ApiHook.dll似乎都被FreeLibrary了,我用vmmap完全看不到了这两个dll了

现在还不想用detours,毕竟可能要用到商业用途,也不想完全把目标PE给暴力修改。

请教下各位,谢谢阿!


IP 地址: 已记录   报告
   2012-08-05, 10:17 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教下Windows7下的AppInit_DLLs和APIHOOK
Reply Quote

Win7对系统DLL做了重构,举例来说,kernel32中的大部分代码都转移到了kernelbase中,kernel32中只保留一个长跳转。具体要看你hook的是哪个API了...


IP 地址: 已记录   报告
   2012-08-08, 11:25 上午
jlflyfox 离线,最后访问时间: 2009/1/24 22:08:06 jlflyfox

发帖数前25位
注册: 2008-10-28
发 贴: 65
Re: 请教下Windows7下的AppInit_DLLs和APIHOOK
Reply Quote

谢谢张老师,虽然我的问题不是这样,不过你的提示,让我bp api的时候少犯错误。

我最初bp CreateFileA,发现始终拦截不到,开始没有注意,后来才发现到是被windbg弄成了kernelbase上去了。

我的问题,也有些眉目了,大致可能与windows7没有关系。

大致如此,不晓得哪个时候开始,微软也弄起了双进程模式,比如ie8,比如mstsc。

我在xp下安装的是老版本的,而windows7下安装的新版本,所以最初以为是windows7的问题。

我这里想拦截的就是mstsc,我的AppInit_DLLs装载第一个dll的时候是看参数有没有rdp文件,如果有才装载我的apihook。

而现在mstsc改成了双进程模式,第一个进程有参数rdp文件,而它发送消息给svchost,后者再启动一个mstsc,没有带参数rdp,所以我就实质上没有拦截到。

不晓得微软这样做,是否为了安全考虑,不过的确不好调试。

我用windbg启动mstsc,但它却不是真正干活的mstsc,而第2个进程windbg去attach的时候却可能已经跑过了我想拦截的函数了。

只有通过AppInit_DLLs,在这个dll里面sleep,或者人为int 3来拦截,这样的确麻烦些。


IP 地址: 已记录   报告
   2012-08-08, 11:44 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教下Windows7下的AppInit_DLLs和APIHOOK
Reply Quote

"我用windbg启动mstsc,但它却不是真正干活的mstsc,而第2个进程windbg去attach的时候却可能已经跑过了我想拦截的函数了。"

对于这个问题,可以使用Image File Execute Options “创建进程时自动启动调试器”...


IP 地址: 已记录   报告
   2012-08-08, 14:05 下午
jlflyfox 离线,最后访问时间: 2009/1/24 22:08:06 jlflyfox

发帖数前25位
注册: 2008-10-28
发 贴: 65
Embarrassed [:$] Re: 请教下Windows7下的AppInit_DLLs和APIHOOK
Reply Quote

啊,是的哈,我把这个给忘记了,谢谢哈!


IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 请教下Windows7下的AppInit_DLLs和APIHOOK

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.